#include<bits/stdc++.h>
using namespace std;
struct node{
    int d;
    int v;
    int a;
    vector<int> num;
}a[100001];
int n,m,l,v;
int p[100001];
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int T;
    cin>>T;
    for(int l=1;l<=T;l++)
    {
        int ans=0;
        cin>>n>>m>>l>>v;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i].d>>a[i].v>>a[i].a;
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i];
        }
        for(int i=1;i<=n;i++)
        {
            if(a[i].v>v && a[i].d<=p[m])
            {
                ans++;
                bool f=false;
                for(int j=1;j<=m;j++)
                {
                    if(!f && p[j]<=a[i].d)
                    {
                        f=true;
                    }
                    else if(p[j]<=a[i].d)
                    {
                        a[i].num.push_back(p[j]);
                    }
                }
            }
        }
        int z=a[1].num.size(),numi=1;
        for(int i=2;i<=n;i++)
        {
            int x=a[i].num.size();
            if(z>x)
            {
                numi=i;
                z=x;
            }
        }
        int cnt=0;
        for(int i=0;i<z;i++)
        {
            int x=a[numi].num[i];
            for(int j=0;j<n;j++)
            {
                if(a[j].num[i]!=a[numi].num[i])
                {
                    cnt++;
                    continue;
                }
            }
        }
        cout<<ans<<' '<<cnt<<'\n';
    }
    return 0;
}
